package com.special.threademo.jvm.classLoader;

import java.util.UUID;

/**
 * Created with IDEA2020.3
 * author:LiuYC
 * DateTime:2021/1/22  14:26
 * 精通jvm张龙的demo代码 p6
 * <p>
 * -XX:+TraceClassLoading 用于追踪类的加载信息并打印出来！
 * 加载的类的查看，可以看到加载的先后顺序！
 * <p>
 * 拓展：
 * -XX:+<option> 表示开启option选项
 * -XX:-<option> 表示关闭option选项
 * -XX:<option>=<value> 表示将option的选项设置为value
 */
public class ClassLoaderDemo {
    public static void main(String[] args) {
        // 测试主动使用的直接定义还字段的类才会初始化。
        System.out.println(myChild1.string1);
        System.out.println("====================");
        // 测试主动使用的子类，其父类已经全部初始化了
        System.out.println(myChild1.string2);
        System.out.println("====================");
        // 常量的初始化，本质含义和反编译
        System.out.println(myChild1.string2);
        System.out.println("====================");
        // 编译期常量和运行期常量
        System.out.println(myRunFinalConst.finalStr);
        System.out.println("====================");
    }

};

class Myparent1 {
    public static String string1 = "hello ";

    static {
        System.out.println("myParent static block");
    }
}

class myFinalConst {
    public static final String finalStr = "final ";

    static {
        System.out.println("myFinal static block");
    }
}class myRunFinalConst {
    public static final String finalStr = UUID.randomUUID().toString();
    static {
        System.out.println("myFinal static block");
    }
}

class myChild1 extends Myparent1 {
    public static String string2 = "welcome";

    static {
        System.out.println("myChild static block");
    }
}

